// 1. 配置axios基地址
//axios.default.baseURL = "https://hmajax.itheima.net";

// 设置基地址
axios.defaults.baseURL = "https://hmajax.itheima.net";

// 2. 公共的提示框函数
const showToast = (msg) => {
  // alert(msg);
  // 2.1 先生成实例对象
  const mytoast = document.querySelector(".my-toast");
  const toastObj = new bootstrap.Toast(mytoast);
  toastObj.show();
  // 2.2 让提示框组件内容改变
  document.querySelector(".toast-body").innerHTML = msg;
};

// showToast("成功");

const data = localStorage.getItem("userMsg")
  ? JSON.parse(localStorage.getItem("userMsg"))
  : {};

// console.log(data);

// 3. 公共的 token是否存在验证
const checkToken = () => {
  // 3.1 先去本地存储获取token
  const { token } = data; // 只要token
  //console.log(token);
  if (!token) {
    //3.2 提示用户登录
    showToast("请登陆后访问");
    //3.3 跳转至登陆页面
    setTimeout(() => {
      location.href = "./login.html";
    }, 2000);
  }
};

// 4.回显用户名
const renderUname = () => {
  const { username } = data;
  // console.log(username);
  if (username) {
    document.querySelector(".username").innerHTML = username;
  }
};

// 5. 退出登录
const logout = () => {
  document.querySelector("#logout").addEventListener("click", (e) => {
    // 5.1. 清空本地存储 localstorage
    localStorage.removeItem("userMsg");
    // 5.2. 提示用户
    showToast("退出成功");
    //5.3. 跳转页面
    setTimeout(() => {
      location.href = "./login.html";
    }, 2000);
  });
};

// 6. 添加请求拦截器 => 每次请求发送之前都会经过这个处理函数

//axios.interceptors.request.use(成功的回调函数，失败的回调函数)

axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // console.log("我被经过了");
    // console.log(config.headers.Authorization);

    //！只有 有了token才会添加到请求头中
    const { token } = data;
    //localStorage.getItem('userMsg') 这样拿到的是一个字符串， 需要转换成JSON
    //config.headers.Authorization 这样写也可以，但不是axios官网推荐的方式，尽量按照下面这样写
    if (token) {
      config.headers["Authorization"] = token;
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

//axios.interceptors.response.use(成功的回调函数，失败的回调函数)
// 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么  比如数据剥离，
    console.log(response.data); // 此时已经被axios包装过了
    return response.data;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    console.dir(error);
    // console.dir(error);
    // 只处理了401
    if (error.response.status === 401) {
      // 代表token过期或被篡改
      showToast("您的登录信息过期，请重新登录");
      //清除存储信息
      localStorage.removeItem("userMsg");
      //跳转到登录页面
      setTimeout(() => {
        location.href = "./login.html";
      }, 1500);
    }

    return Promise.reject(error);
  }
);
